package com.Questions.hash;
import java.util.*;
public class leetcode697 {
//    public int findShortestSubArray(int[] nums) {
//        int n=nums.length;
//        List<Integer> list=new ArrayList<>();
//        int max=1;
//        int maxId=-1;
//        Map<Integer,Integer> map=new HashMap<>();
//        for(int i=0;i<n;++i){
//            if(map.containsKey(nums[i])){
////                max=Math.max(max,map.get(nums[i])+1);
//                if(map.get(nums[i])+1>max){
//                    list.clear();
//                    list.add(nums[i]);
//                    max= map.get(nums[i])+1;
//                }else if(map.get(nums[i])+1==max){
//                    list.add(nums[i]);
//                }
//                map.put(nums[i],map.get(nums[i])+1);
//
//            }else{
//                map.put(nums[i],1);
//            }
//        }
//
//    }
    public int findShortestSubArray(int[] nums) {
        Map<Integer, int[]> map = new HashMap<Integer, int[]>();
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            if (map.containsKey(nums[i])) {
                map.get(nums[i])[0]++;
                map.get(nums[i])[2] = i;
            } else {
                map.put(nums[i], new int[]{1, i, i});
                // 长度 起始位置 终点位置
            }
        }

        int maxNum = 0, minLen = 0;
        for (Map.Entry<Integer, int[]> entry : map.entrySet()) {
            int[] arr = entry.getValue();
            if (maxNum < arr[0]) {
                maxNum = arr[0];
                minLen = arr[2] - arr[1] + 1;
            } else if (maxNum == arr[0]) {// 遇到同样频率的元素
                if (minLen > arr[2] - arr[1] + 1) {
                    // 如果保持其频率的长度更少 则选择较小值
                    minLen = arr[2] - arr[1] + 1;
                }
            }
        }
        return minLen;
    }

}
